package com.ruoyi.psi.sale.order.mapper;


import com.ruoyi.psi.sale.order.domain.SaleOrderQuantity;
import com.ruoyi.psi.sale.order.domain.*;
import org.apache.ibatis.annotations.Param;

import java.sql.Timestamp;
import java.util.List;

/**
 * 销售订单
 * 数据层
 */
public interface SaleOrderMapper {
    /**
     * 销售订单查询
     * @param cond
     * @return
     */
    List<SaleOrderDto> selectSaleOrderList(SaleOrderCond cond);
    List<SaleOrderDto> selectSaleOrderByUsername(SaleOrderCond cond);

    /**
     * 按编号查询
     * @param saleOrderId 销售订单编号
     * @return
     */
    SaleOrderDto selectSaleOrderById(String saleOrderId);
    /**
     * 销售订单新增
     * @param saleOrder
     * @return
     */
    int insertSaleOrder(SaleOrderDomain saleOrder);

    /**
     * 销售订单更新
     * @param saleOrder
     * @return
     */
    int updateSaleOrder(SaleOrderDomain saleOrder);

    /**
     * 更新销售订单删除标志位
     * @param saleOrder
     * @return
     */
    int updateSaleOrderDeleteFlag(SaleOrderDomain saleOrder);

    /**
     * 更新审批状态
     * @param saleOrderId
     * @return
     */
    int completeApprovalFlag(String saleOrderId);

    /**
     * 拒绝审批状态
     * @param saleOrderId
     * @return
     */
    int refuseApprovalFlag(String saleOrderId);

    /**
     * 审批拒绝之后更新备注
     * @param saleOrderId
     * @return
     */
    int updateRefuseApprovalRemark(@Param("saleOrderId")String saleOrderId, @Param("remark")String remark);

    /**
     * 更新收款情况
     * @param saleOrderId
     * @return
     */
    int updateCollectionStatus(String saleOrderId);

    /**
     * 销售订单详细查询
     * @param cond
     * @return
     */
    List<SaleOrderListDto> selectSaleOrderListList(SaleOrderCond cond);

    /**
     * 查询销售订单对应的所有产品详细
     * @param saleOrderId 销售订单编号
     * @return
     */
    List<SaleOrderListDto> selectSaleOrderListListById(String saleOrderId);

    /**
     * 查询销售订单对应的指定产品详细
     * @param saleOrderId 销售订单编号
     * @return
     */
    SaleOrderListDto  selectSaleOrderListById(@Param("saleOrderId")String saleOrderId, @Param("produceId")String produceId);
    SaleOrderListDto  selectSaleOrderListOnlyById(String saleOrderId);

    /**
     * 销售订单详细新增
     * @param saleOrderList 销售订单详细
     * @return
     */
    int insertSaleOrderList(SaleOrderListDomain saleOrderList);

    /**
     * 销售订单详细更新
     * @param saleOrderList 销售订单详细
     * @return
     */
    int updateSaleOrderList(SaleOrderListDomain saleOrderList);

    /**
     * 更新销售订单子表删除标志位
     * @return
     */
    int updateSaleOrderListDeleteFlag(@Param("saleOrderId")String saleOrderId, @Param("produceId")String produceId);

    /**
     * 删除销售订单详细
     * @param saleOrderId  销售订单编号
     * @param produceId 产品编号
     * @return
     */
    int deleteSaleOrderListById(@Param("saleOrderId")String saleOrderId, @Param("produceId")String produceId);

    /**
     * 获取最新的采购订单编号
     * @return
     */
    String getSaleOrderId();

    /**
     * 查询销售订单数量
     * @return
     */
    List<SaleOrderQuantity> selectSaleOrderQuantity();

    /**
     * 更新销售出库时间
     * @param saleOrderId
     * @return
     */
    int updateActualDeliveryTime(String saleOrderId);

    /**
     * 更新销售情况为出库
     * @param saleOrderId
     * @return
     */
    int updateSaleOrderDeliveryStatus(String saleOrderId);

    /**
     * 按客户编号查询
     * @param customerInfoId 客户编号
     * @return
     */
    List<SaleOrderDto> selectSaleOrderByCustomerId(String customerInfoId);

    /**
     * 查询订单月份
     * @return
     */
    List<ProductOrderQuantity> selectProductOrderMonth();

    List<SaleOrderDto> searchOrderBetweenTime(@Param("beginTime") String beginTime, @Param("endTime")String endTime);

    List<SaleOrderListDto> selectOrderByName(String produceName);
}
